﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using vudu.Logica.Clases;
using vudu.EnlaceDatos.SqlServer;

namespace vudu.Pruebas
{
    [TestFixture]
    public class PruebaEscuela
    {
        [TestCase]
        public void PruebaAgregarEscuela()
        {
            // se crea el objeto de tipo escuela      
            Escuela unaEscuela = new Escuela("Escuela de Prueba","Descripcion de la escuela de prueba","02124074407","Susana Garcia","Montalban",1);
            SqlServerEscuela sqlServerEscuela = new SqlServerEscuela();
            int id = sqlServerEscuela.InsertarEscuela(unaEscuela, "Universidad Catolica Andres Bello");
            unaEscuela.IdEscuela = id;

            // se crea una nueva escuela que servira de comparacion
            Escuela buscar = sqlServerEscuela.ConsultarEscuela(id);
            
            //verifico que el valor de retorno de InsertarEscuela no sea null
            Assert.IsNotNull(id);
           
            //verifica si los dos objetos son iguales
            Assert.AreEqual(buscar.IdEscuela,unaEscuela.IdEscuela);
            Assert.AreEqual(buscar.DescripcionEscuela, unaEscuela.DescripcionEscuela);
            Assert.AreEqual(buscar.DirectorEscuela, unaEscuela.DirectorEscuela);
            Assert.AreEqual(buscar.TelefonoEscuela, unaEscuela.TelefonoEscuela);
            Assert.AreEqual(buscar.EstadoEscuela, unaEscuela.EstadoEscuela);
        }

        [TestCase]
        public void PruebaConsultarEscuela()
        {  
            //Creo un objeto tipo SqlServerEscuela para poder invocar al metodo de consulta 
            SqlServerEscuela sqlServerEscuela =  new SqlServerEscuela();
            // creo un objeto "escuela" para buscar la primera escuela en la bd vudu
            Escuela escuela = sqlServerEscuela.ConsultarEscuela(1);
            // verifico que el objeto "escuela" no este null         
            Assert.IsNotNull(escuela);
            // Verifico que la busqueda sea correcta y tenga los atributos correspondientes
            Assert.AreEqual(escuela.NombreEscuela, "Ingeniería Informática");
            Assert.AreEqual(escuela.TelefonoEscuela, "02124074580");
            Assert.AreEqual(escuela.DirectorEscuela, "Susana Garcia");
            Assert.AreEqual(escuela.DireccionEscuela, "Montalban");
        }

        [TestCase]
        public void PruebaConsultarListaEscuela()
        {
            // creo un string con el nombre de la universidad 
            string nombreUniversidad = "Universidad Catolica Andres Bello";
            // creo un objeto para poder llamar al metodo
            SqlServerEscuela sql = new SqlServerEscuela();
            // creo una lista de escuelas y llamo al metodo que me listas las escuelas por universidad
            List<Escuela> miListaEscuelas = sql.SeleccionListaEscuela(nombreUniversidad);
            
            //verifico que la lista no este en null
            Assert.IsNotNull(miListaEscuelas);
            //verifico que la lista no este vacia
            Assert.IsNotEmpty(miListaEscuelas);
            //verifico que al contar la lista de mas de cero
            Assert.AreNotEqual(miListaEscuelas.Count,0);
       
        }

        [TestCase]
        public void PruebaModificarEscuela()
        {
            //creo un objeto para poder consultar
            SqlServerEscuela sql = new SqlServerEscuela();
            //creo un objeto de la clase escuela y le asigno valores a los atributos
            Escuela unaEscuela = new Escuela();
            unaEscuela.NombreEscuela = "Prueba de Modificar Escuela";
            unaEscuela.DescripcionEscuela = "Descripcion Escuela";
            unaEscuela.TelefonoEscuela = "4325367";
            unaEscuela.DirectorEscuela = "Lara Croft";
            unaEscuela.DireccionEscuela = "Prueba Dir";
            unaEscuela.EstadoEscuela = 1;
            
            // inserto el objeto de prueba en la bd
            int id = sql.InsertarEscuela(unaEscuela,"Universidad Metropolitana");
            // asigno el id que devolvio la insercion al objeto con el que vamos a comparar el update
            unaEscuela.IdEscuela = id;
            // cambio los valores de los atributos
            unaEscuela.NombreEscuela = "Prueba Escuela (MODIFICADO)";
            unaEscuela.DescripcionEscuela = "Descripcion de la Prueba de Modificar Escuela(MODIFICADO)";
            unaEscuela.TelefonoEscuela = "4325368";
            unaEscuela.DirectorEscuela = "Lara Croft (MODIFICADO)";
            unaEscuela.DireccionEscuela = "Direccion (MODIFICADO)";

            // llamo al metodo Modificar y me devuelve true si lo ejecuto con exito
            Assert.IsTrue(sql.ModificarEscuela(unaEscuela));
            // creo un objeto para poder comparar si se ha modificado con el mismo id inicial
            Escuela escuelaModificada = sql.ConsultarEscuela(id);
            //verifico que el objeto no este en null
            Assert.IsNotNull(escuelaModificada);
            // verifico que los atributos del objeto sean los modificados
            Assert.AreEqual(unaEscuela.IdEscuela,escuelaModificada.IdEscuela);
            Assert.AreEqual(unaEscuela.NombreEscuela, escuelaModificada.NombreEscuela);
            Assert.AreEqual(unaEscuela.DireccionEscuela, escuelaModificada.DireccionEscuela);
            Assert.AreEqual(unaEscuela.TelefonoEscuela, escuelaModificada.TelefonoEscuela);
            Assert.AreEqual(unaEscuela.EstadoEscuela, escuelaModificada.EstadoEscuela);
        }
        [TestCase]
        public void PruebaEliminarEscuela()
        {
            //creo un objeto de la clase SqlServerEscuela para 
            SqlServerEscuela sql = new SqlServerEscuela();
            // consulto la escuela a eliminar para tener el estado original
            Escuela escuela = sql.ConsultarEscuela(86);
            // verifico que el metodo EliminarEscuela devuelva true
            Assert.IsTrue(sql.EliminarEscuela(escuela));
            //verifico que el estado de la escuela eliminada sea cero "Inactivo"
            Assert.AreEqual(escuela.EstadoEscuela,0);
        }

        [TestCase]

        public void PruebaObtenerUniversidadProfesor()
        {
            SqlServerEscuela sql = new SqlServerEscuela();
            String _nombreUniversidad = "";
            _nombreUniversidad = sql.ObtenerUniversidadProfesor(4097234);

            Assert.AreEqual("Universidad Catolica Andres Bello",_nombreUniversidad);

        }

        [TestCase]

        public void PruebaObtenerUniversidadEstudiante()
        {
            SqlServerEscuela sql = new SqlServerEscuela();
            String _nombreUniversidad = "";
            _nombreUniversidad = sql.ObtenerUniversidadEstudiante(1);

            Assert.AreEqual("Universidad Catolica Andres Bello", _nombreUniversidad);

        }

    }
}